import { defineStore } from "pinia";
import { ref } from "vue";
import { userService } from "@/services/user";
import { setToken, removeToken, getToken } from "@/utils/auth";

export const useUserStore = defineStore("user", () => {
  // 状态
  const token = ref(getToken() || "");
  const userInfo = ref(null);
  const isLogin = ref(!!getToken());

  // 获取用户信息
  const getUserInfo = async () => {
    try {
      const token = getToken();
      if (!token) return null;

      const res = await userService.getUserInfo();
      if (res.code === 200 && res.data) {
        userInfo.value = res.data;
        isLogin.value = true;
        return res.data;
      }
      
      // 如果获取失败，清除登录状态
      clearUserData();
      return null;
    } catch (error) {
      console.error("获取用户信息失败:", error);
      clearUserData();
      return null;
    }
  };

  // 微信手机号一键登录
  const wxLogin = async (loginData) => {
    try {
      // 调用微信手机号登录接口
      const res = await userService.wxPhoneLogin({
        code: loginData.code,
        encryptedData: loginData.encryptedData,
        iv: loginData.iv,
      });

      if (res.code === 200) {
        // 保存token和用户信息
        const { accessToken, ...userData } = res.data;

        // 设置token
        token.value = accessToken;
        setToken(accessToken);
        isLogin.value = true;

        // 设置用户信息
        userInfo.value = {
          ...userData,
          phone: userData.phone || "", // 确保phone字段存在
          nickName: userData.nickName || "微信用户", // 默认昵称
          avatarUrl: userData.avatarUrl || "/static/default-avatar.png", // 默认头像
        };

        return res;
      }
      return null;
    } catch (error) {
      console.error("微信登录失败:", error);
      throw error;
    }
  };

  // 退出登录
  const logout = async () => {
    try {
      // 直接清除本地数据
      clearUserData();
      uni.showToast({
        title: '退出成功',
        icon: 'success',
        duration: 1500
      });

      // 延迟跳转，让用户看到提示
      setTimeout(() => {
        // 退出后跳转到首页
        uni.switchTab({
          url: '/pages/index/index'
        });
      }, 1500);

      return true;
    } catch (error) {
      console.error('退出登录失败:', error);
      uni.showToast({
        title: '退出失败',
        icon: 'none'
      });
      return false;
    }
  };

  // 清除用户数据
  const clearUserData = () => {
    token.value = "";
    removeToken();
    userInfo.value = null;
    isLogin.value = false;
  };

  // 检查登录状态
  const checkLogin = () => {
    const hasToken = !!getToken();
    isLogin.value = hasToken;

    // 如果有token但没有用户信息，尝试获取用户信息
    if (hasToken && !userInfo.value) {
      getUserInfo();
    }

    return hasToken;
  };

  // 更新用户信息
  const updateUserInfo = async (data) => {
    try {
      const res = await userService.updateUserInfo(data);
      if (res.code === 200) {
        // 更新成功后重新获取用户信息
        await getUserInfo();
        return true;
      }
      return false;
    } catch (error) {
      console.error("更新用户信息失败:", error);
      throw error;
    }
  };

  // 刷新token
  const refreshToken = async () => {
    try {
      const res = await userService.refreshToken();
      if (res.code === 200) {
        token.value = res.data.token;
        setToken(res.data.token);
        return true;
      }
      return false;
    } catch (error) {
      console.error("刷新token失败:", error);
      return false;
    }
  };

  return {
    // 状态
    token,
    userInfo,
    isLogin,

    // 方法
    getUserInfo,
    wxLogin,
    logout,
    checkLogin,
    updateUserInfo,
    refreshToken,
    clearUserData,
  };
});
